Mark and Sweep Algorithm

Java Technologies - জাভা ভার্চুয়াল মেশিন (Java Virtual Machine) JVM এর Garbage Collection |
161
161

Mark and Sweep Algorithm হল Garbage Collection এর একটি জনপ্রিয় পদ্ধতি যা Java Virtual Machine (JVM) এর মেমরি ম্যানেজমেন্টে ব্যবহৃত হয়। এটি অপ্রয়োজনীয় অবজেক্টগুলো (যেগুলোর আর কোনো রেফারেন্স নেই) শনাক্ত এবং মুক্ত (free) করার জন্য ব্যবহার করা হয়। মূলত, Mark and Sweep পদ্ধতি দুটি প্রধান ধাপে কাজ করে:

Mark and Sweep Algorithm এর ধাপ:

  1. Mark Phase (চিহ্নিতকরণ):
    • এই ধাপে, JVM root objects থেকে শুরু করে সমস্ত reachable objects চিহ্নিত করে। Reachable objects এমন অবজেক্ট যা এখনো কোনো active থ্রেড দ্বারা ব্যবহৃত হচ্ছে।
    • সমস্ত অবজেক্টকে ট্র্যাক করা হয় যা এখনও ব্যবহারযোগ্য, অর্থাৎ যেগুলির জন্য কোনো রেফারেন্স রয়েছে।
    • অবজেক্টগুলির মধ্যে যেগুলি reachable (অথবা প্রাসঙ্গিক) নয়, সেগুলি চিহ্নিত করা হয় "unreachable" হিসেবে।
  2. Sweep Phase (মোছার কাজ):
    • এই ধাপে, JVM সমস্ত unreachable objects কে মুছে ফেলে (free) এবং মেমরি পুনরুদ্ধার করে।
    • শুধুমাত্র reachable অবজেক্টগুলি রয়ে যায় এবং এগুলির মেমরি ঠিকভাবে ব্যবহৃত হয়।

Mark and Sweep Algorithm এর বিস্তারিত বর্ণনা:

Mark Phase:

  • এই ধাপে, root objects থেকে শুরু হয় চিহ্নিতকরণ প্রক্রিয়া। Root objects বলতে এমন অবজেক্ট বোঝায় যা সরাসরি অ্যাক্সেসযোগ্য, যেমন:
    • Local variables (Stack)
    • Static fields (Class Area)
    • Active threads (Thread Stack)
  • প্রথমে, এই root objects গুলির সমস্ত রেফারেন্সগুলি চিহ্নিত করা হয়।
  • তারপর, এই root objects এর রেফারেন্সে থাকা অবজেক্টগুলি পুনরায় চিহ্নিত করা হয় (যেগুলি reachable objects হিসেবে চিহ্নিত হবে) এবং এই প্রক্রিয়া চলতে থাকে যতক্ষণ না সমস্ত reachable objects চিহ্নিত হয়ে না যায়।

উদাহরণ:

  • যদি একটি linked list থাকে, এবং তার প্রথম নোড একটি root object হিসাবে চিহ্নিত হয়, তবে সেই নোডের মধ্যে থাকা অন্যান্য নোডগুলি চিহ্নিত হবে যতক্ষণ না লিঙ্কড লিস্টের সমস্ত অবজেক্ট চিহ্নিত না হয়।

Sweep Phase:

  • এই ধাপে, JVM সমস্ত unreachable objects কে মুছে ফেলবে, কারণ এগুলির আর কোনো রেফারেন্স নেই, অর্থাৎ এগুলি আর ব্যবহৃত হচ্ছে না।
  • JVM মেমরির এই অব্যবহৃত অংশগুলি পুনরুদ্ধার করে, যাতে নতুন অবজেক্টের জন্য মেমরি ব্যবহার করা যায়।

Mark and Sweep Algorithm এর সুবিধা এবং অসুবিধা:

সুবিধা:

  1. একই সময়ে মেমরি পুনঃব্যবহার: মেমরি ব্যবহার না হওয়া অবজেক্টগুলি পরিস্কার করার মাধ্যমে memory leaks কমানো হয়।
  2. সোজা এবং সরল: Mark and Sweep algorithm এর কৌশল সাধারণত সহজ এবং কার্যকরী। এটি বড় পরিমাণে অবজেক্ট সাফ করতে পারে।

অসুবিধা:

  1. Performance Overhead: এই প্রক্রিয়া কিছুটা সময়সাপেক্ষ এবং JVM এর চলমান প্রোগ্রামের জন্য অতিরিক্ত CPU cycles এবং memory প্রয়োজন। প্রোগ্রামের পারফরম্যান্সে এটি প্রভাব ফেলতে পারে।
  2. Stop-the-World Events: Mark and Sweep পদ্ধতিটি কাজ করার সময় সাধারণত stop-the-world ইভেন্ট হয়, যেখানে সমস্ত থ্রেডকে থামিয়ে দেয়, এবং তখন প্রোগ্রামটিতে কোনও কাজ করা যায় না। এটি ইম্প্রুভড পারফরম্যান্সের জন্য অপ্টিমাইজেশনের প্রয়োজন হতে পারে।

Mark and Sweep Algorithm এর উদাহরণ:

ধরা যাক, আমাদের একটি অবজেক্ট থাকে যা Object A এবং তা Object B নামক একটি অবজেক্টের রেফারেন্স ধারণ করে। যদি Object B আর কোনো থ্রেড দ্বারা রেফারেন্স না থাকে, তবে Object B কে unreachable হিসেবে চিহ্নিত করা হবে এবং গার্বেজ সংগ্রাহক তা মুছে ফেলবে।

  1. Mark Phase:
    • Object A এবং Object B কে রেফারেন্সিং করা হয়।
    • যদি Object A রেফারেন্স root object হয়ে থাকে, তবে Object A চিহ্নিত হবে। Object B যদি কোনো থ্রেড বা চলমান অবজেক্টের অংশ না হয়, তবে এটি মুছে ফেলা হবে।
  2. Sweep Phase:
    • Object A রেফারেন্সে থাকা Object B কে unreachable হিসেবে চিহ্নিত করে মুছে ফেলা হবে।
    • মেমরি পুনঃব্যবহারযোগ্য হবে।

Mark and Sweep Algorithm এর সারাংশ:

  • Mark and Sweep Algorithm হল একটি গার্বেজ সংগ্রাহক পদ্ধতি যা দুটি প্রধান ধাপ অনুসরণ করে:
    1. Mark Phase: এই ধাপে, সমস্ত reachable অবজেক্ট গুলি চিহ্নিত করা হয়, যা বর্তমানে ব্যবহৃত হচ্ছে।
    2. Sweep Phase: এই ধাপে, সমস্ত unreachable অবজেক্ট মুছে ফেলা হয়, এবং মেমরি পুনরুদ্ধার করা হয়।
  • এটি একটি stop-the-world প্রক্রিয়া হতে পারে, এবং একটি নির্দিষ্ট সময়ের জন্য পারফরম্যান্স প্রভাব ফেলতে পারে।
Content added By
Promotion